#pragma once
#include <vector>
#include "GraphTools.h"
namespace DDAGui {
using namespace std;
class DF 
{
public:
	DF(void);
	~DF(void);

	virtual void calculationInit();
	virtual void calculate1Step();
	virtual void endCalculation();
    bool hasNextStep();
    int getStepNumber();
    FrameData getCurrentFrame();
    vector<int> getSchema();

private:
	void init();

	void df01();
	void df02();
	void df03();
	void df04();
	void df05();
	void df06();
	void df07();
	void df08();
	void df09();
	void df10();
	void df11();
	void df12();
	void df13();
	void df14();
	void df15();
	void df16();
    void df17();
	void df18();
	void df20();
	void df21();
	void df22();
	void df24();
	void df25();
	void df26();
	void df27();

	void di20();
	void di08();

	void graf(double w[12]);
	double sign(double f2);
	void dstn();
	void dist();
	void angl();
	void cons();
    void watr();
    void wahd();
    void step();
	void mblo();
	void mjoi();
	double sign();
	void proj();
	void dspl();
	void invr();
	void mult();
	void fill(long k8);
	void fild(long k8);

	void clrs();
	void shgp();
	void area();
	void fill();
	void movl(double x9, double y9, long k9, long p0, double w[12]);
	void dral(double x9, double y9, long k9, long p0, double w[12]);
	void writ(double x8, double y8, long k9, long p0, char   aa[80], double w[12]);
	void exti(vector< vector<long> >& ss, long n7, long n8, long m7);
	void extd(vector< vector<double> >& ss, long n7, long n8, long m7);
	void sleep(long i8);
	void shgp(long p0);
};

class FrameCounter
{
public:
	int getCount()					{	return _counter ; }
	void increaseCount()			{	_counter++; }
	void reset()					{	_counter = 0; }
private:
	int _counter;
};

class FrameIndexModer
{
public:
	void setMod(int mod)		{_mod = mod;	if(mod<=0) _mod=1	;}
	bool ifMod(int frameIndex)	{	return frameIndex%_mod==0	;}
	void reset()				{ _mod = 1;	}

private:
	int _mod;
};
}